package xutil

import (
	"encoding/json"
	"errors"
	"fmt"

	"gitee.com/wosylf/ltool/pkg/xhttp"
)

type S天地图 struct {
	Tk string
}

type Base天地图 struct {
	Msg    string `json:"msg,omitempty"`
	Status string `json:"status,omitempty"`
}

type S地理编码查询结果 struct {
	Base天地图
	Location S地理编码查询 `json:"location,omitempty"`
}
type S地理编码查询 struct {
	Lon   string `json:"lon,omitempty"`
	Lat   string `json:"lat,omitempty"`
	Level string `json:"level,omitempty"` //地名地址
}

type S定位详细信息 struct {
	Address         string `json:"address,omitempty"`
	City            string `json:"city,omitempty"`
	Town            string `json:"town,omitempty"`
	TownCode        string `json:"town_code,omitempty"`
	County          string `json:"county,omitempty"`
	CountyCode      string `json:"county_code,omitempty"`
	ProvinceCode    string `json:"province_code,omitempty"`
	Nation          string `json:"nation,omitempty"`
	Road            string `json:"road,omitempty"`
	PoiPosition     string `json:"poi_position,omitempty"`
	AddressPosition string `json:"address_position,omitempty"`
	RoadDistance    int    `json:"road_distance,omitempty"`
	Poi             string `json:"poi,omitempty"`
	PoiDistance     int    `json:"poi_distance,omitempty"`
	AddressDistance int    `json:"address_distance,omitempty"`
}
type S逆地理编码查询 struct {
	FormattedAddress string  `json:"formatted_address,omitempty"`
	AddressComponent S定位详细信息 `json:"addressComponent,omitempty"`
}
type S逆地理编码查询结果 struct {
	Base天地图
	Result S地理编码查询 `json:"result,omitempty"`
}

func F新建天地图链接(tk string) *S天地图 {
	return &S天地图{Tk: tk}
}

func (a *S天地图) F逆地理编码查询(lon, lat string) (resp *S逆地理编码查询结果, err error) {
	resp = new(S逆地理编码查询结果)

	url := fmt.Sprintf(`http://api.tianditu.gov.cn/geocoder?postStr={'lon':%v,'lat':%v,'ver':1}&type=geocode&tk=`, lon, lat) + a.Tk

	_, by, err := xhttp.NewClient().Get(url).EndBytes(ctx)
	if err != nil {
		return
	}
	if err = json.Unmarshal(by, resp); err != nil {
		return
	}
	if resp.Status != "0" {
		err = errors.New(resp.Msg)
	}
	return
}
func (a *S天地图) F地理编码查询(keyword string) (resp *S地理编码查询结果, err error) {
	resp = new(S地理编码查询结果)
	url := `https://api.tianditu.gov.cn/geocoder?ds={"keyWord":"` + keyword + `"}&tk=` + a.Tk
	_, by, err := xhttp.NewClient().Get(url).EndBytes(ctx)
	if err != nil {
		return
	}
	if err = json.Unmarshal(by, resp); err != nil {
		return
	}
	if resp.Status != "0" {
		err = errors.New(resp.Msg)
	}
	return
}
